const async = require('async');
const { render } = require('consolidate').handlebars;

/**
 * 替换模板数据
 * 根据用户的输入过滤掉不需要的文件之后, 
 * 模板文件中模板字符串替换为收集的数据,
 * 渲染模板
 * @param {object} files 
 * @param {object} data 
 * @param {function} done 
 */
const replace = (files, data, done) => {
    const dataSource = data, keys = Object.keys(files);

    async.each(keys, (file, next) => {
        // 读取文件内容
        const str_content = files[file].contents.toString();

        // 不渲染不含mustaches表达式的文件
        if (!/{{([^{}]+)}}/g.test(str_content)) {
            return next();
        };

        // 调用 handlebars 渲染文件
        render(str_content, dataSource, (err, simple_content) => {
            if (err) {
                err.message = `[${file}] ${err.message}`;
                return next(err);
            }

            // new Buffer()函数已经废弃, 推荐使用Buffer.from()代替
            files[file].contents = Buffer.from(simple_content);
            next();
        })
    }, done);
};


module.exports = replace;